x11: Add gdk_x11_display_get_max_request_size()
authorBenjamin Otte <otte@redhat.com>
Sat, 25 Nov 2017 00:25:31 +0000 (01:25 +0100)
committerBenjamin Otte <otte@redhat.com>
Sun, 3 Dec 2017 04:46:47 +0000 (05:46 +0100)
There's multiple places in the clipboard code where I need it, so make
it a custom function.

gdk/x11/gdkclipboard-x11.c
gdk/x11/gdkdisplay-x11.c
gdk/x11/gdkdisplay-x11.h

index aef23b7ee39fb999223771be3c0f925958ccca37..90c17bbfe56076097d421eac2d4e70b569b8a212 100644 (file)
@@ -54,12 +54,6 @@ struct _GdkX11ClipboardClass
 
 G_DEFINE_TYPE (GdkX11Clipboard, gdk_x11_clipboard, GDK_TYPE_CLIPBOARD)
 
-#define SELECTION_MAX_SIZE(display)                                     \
-  MIN(262144,                                                           \
-      XExtendedMaxRequestSize (GDK_DISPLAY_XDISPLAY (display)) == 0     \
-       ? XMaxRequestSize (GDK_DISPLAY_XDISPLAY (display)) - 100         \
-       : XExtendedMaxRequestSize (GDK_DISPLAY_XDISPLAY (display)) - 100)
-
 static GInputStream * 
 text_list_convert (GdkX11Clipboard *cb,
                    GInputStream    *stream,
@@ -219,7 +213,7 @@ gdk_x11_clipboard_request_targets_finish (GObject      *source_object,
   gdk_content_formats_unref (formats);
 
   g_input_stream_read_bytes_async (stream,
-                                   SELECTION_MAX_SIZE (display),
+                                   gdk_x11_display_get_max_request_size (display),
                                    G_PRIORITY_DEFAULT,
                                    NULL,
                                    gdk_x11_clipboard_request_targets_finish,
@@ -255,7 +249,7 @@ gdk_x11_clipboard_request_targets_got_stream (GObject      *source,
   display = gdk_clipboard_get_display (GDK_CLIPBOARD (cb));
 
   g_input_stream_read_bytes_async (stream,
-                                   SELECTION_MAX_SIZE (display),
+                                   gdk_x11_display_get_max_request_size (display),
                                    G_PRIORITY_DEFAULT,
                                    NULL,
                                    gdk_x11_clipboard_request_targets_finish,
index 1aecc757530ab4eed67e1d156aef218b6c523643..30f168061af2b920e95a3543887677d9916fa3e2 100644 (file)
@@ -3041,6 +3041,20 @@ gdk_x11_set_sm_client_id (const gchar *sm_client_id)
 
   g_slist_free (displays);
 }
+gsize
+gdk_x11_display_get_max_request_size (GdkDisplay *display)
+{
+  Display *xdisplay = GDK_DISPLAY_XDISPLAY (display);
+  gsize size;
+
+  size = XExtendedMaxRequestSize (xdisplay);
+  if (size <= 0)
+    size = XMaxRequestSize (xdisplay);
+  
+  size = MIN (262144, size - 100);
+  return size;
+}
 
 GdkX11Screen *
 gdk_x11_display_get_screen (GdkDisplay *display)
index 11a32fbce67c278252182a05eeaef1aa6af1d52d..dc1100ee68144ac59ed9946354abb44fe43a2f9b 100644 (file)
@@ -172,6 +172,7 @@ GdkX11Screen *_gdk_x11_display_screen_for_xrootwin (GdkDisplay  *display,
                                                     Window       xrootwin);
 void       _gdk_x11_display_error_event         (GdkDisplay  *display,
                                                  XErrorEvent *error);
+gsize      gdk_x11_display_get_max_request_size (GdkDisplay *display);
 
 GdkFilterReturn _gdk_wm_protocols_filter        (GdkXEvent   *xev,
                                                  GdkEvent    *event,